using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using RC.ControlAcceso.ObjetosNegocio;
//using RC.CodigoBarras.Utiles;
using RC.ControlAcceso.Reportes;


public partial class UCFiltroRPT : System.Web.UI.UserControl
{

    #region variables
    private CA2PersonalColeccion mListaLegajos;
    private CA2ParteDiarioColeccion mListaPartesDiarios;

    private bool mUtilizarRangoHorario = false;

    private DateTime mFechaIni, mFechaFin;
    private CA2Personal mLegajoIni, mLegajoFin;
    private CA2Sector mSector;

    #endregion

    #region propiedades

    public string MostrarError
    {
        get
        {            
            return lblMsjError.ToString();
        }
        set 
        {
            if (lblMsjError == null)
                lblMsjError = new Label();
            lblMsjError.Text = value; 
        }
    }

    public DateTime FechaIni
    {
        get
        {
            if (mFechaIni <= CA2Parametros.FechaMinima)
                try { mFechaIni = DateTime.Parse(txtFechaIni.Text); }
                catch { mFechaIni = CA2Parametros.FechaMinima; }
            return mFechaIni;
        }
        set
        {
            if (txtFechaIni == null)
                txtFechaIni = new TextBox();
            mFechaIni = value;
            txtFechaIni.Text = value.ToString();
        }
    }

    public DateTime FechaFin
    {
        get
        {
            if (mFechaFin <= CA2Parametros.FechaMinima)
                try { mFechaFin = DateTime.Parse(txtFechaFin.Text); }
                catch { mFechaFin = CA2Parametros.FechaMinima; }
            return mFechaFin;
        }
        set
        {
            if (txtFechaFin == null)
                txtFechaFin = new TextBox();
            mFechaFin = value;            
            txtFechaFin.Text = value.ToString();
        }
    }

    public CA2Personal LegajoIni
    {
        get
        {            
            return mLegajoIni;
        }
        set
        {
            if (txtLEgajoIni == null)
                txtLEgajoIni = new TextBox();
            mLegajoIni = value;
            //txtLEgajoIni.Text = value.ToString();
        }
    }

    public CA2Personal LegajoFin
    {
        get
        {           
            return mLegajoFin;
        }
        set
        {
            if (txtLegajoFin == null)
                txtLegajoFin = new TextBox();
            mLegajoFin = value;
            //txtLegajoFin.Text = value.ToString();
        }
    }

    public CA2Sector Sector
    {
        get
        {
            return mSector;
        }
        set
        {
            mSector = value;
        }
    }

    public string LegajoDesde
    {
        set { txtLEgajoIni.Text = value; }
        get { return txtLEgajoIni.Text; }
    }

    public string LegajoHasta
    {
        set { txtLegajoFin.Text = value; }
        get { return txtLegajoFin.Text; }
    }

    public string MensajeError
    {
        set { lblMsjError.Text = value; }
        get { return lblMsjError.Text; }
    }

    public int idSector
    {        
        get { return int.Parse(cmbSectores.SelectedValue); }
    }

    
    #endregion

    #region constructores
    #endregion

    #region metodos
    public void UtilizarRangoHorario(bool pHorario)
    {
        try
        {
            if (pHorario)
            {
                this.txtFechaIni.MaxLength = 16;
                this.txtFechaIni.Width = Unit.Pixel(120);
                this.txtFechaFin.MaxLength = 16;
                this.txtFechaFin.Width = Unit.Pixel(120);
                mUtilizarRangoHorario = pHorario;
            }
        }
        catch { }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            CAConfiguracionRegionalON.AplicarConfiguracion();
            if (!IsPostBack)
            {
                LimpiarControles();
                CargarSector();
                if (mUtilizarRangoHorario)
                {
                    txtFechaIni.Text = DateTime.Now.AddDays(-1).ToString("dd/MM/yyyy HH:mm");
                    txtFechaFin.Text = DateTime.Now.ToString("dd/MM/yyyy HH:mm");
                }
                else
                {
                    txtFechaIni.Text = DateTime.Parse("1/" + DateTime.Now.Month.ToString() + "/" + DateTime.Now.Year.ToString()).ToShortDateString();
                    txtFechaFin.Text = DateTime.Parse(txtFechaIni.Text).AddMonths(1).ToShortDateString();
                    txtFechaFin.Text = DateTime.Parse(txtFechaFin.Text).AddDays(-1).ToShortDateString();
                }
            }
        }
        catch (Exception) { }
    }
    public void Generar()
    {
        try
        {
            lblMsjError.Text = "";
            try
            {
                if (Validar())
                {
                    BuscarLegajos();
                }
            }
            catch (Exception ex)
            {
                Session["error"] = ex;
                Response.Redirect("CAError.aspx");
            }

        }
        catch (Exception) { }
    }
    private void CargarSector()
    {
        try
        {
            CA2SectorColeccion _sectores = new CA2SectorColeccion();
            _sectores = _sectores.ObtenerTodosLosSectores();

            cmbSectores.DataSource = _sectores;
            cmbSectores.DataTextField = "Descripcion";
            cmbSectores.DataValueField = "IdSector";
            cmbSectores.DataBind();
            cmbSectores.Items.Insert(0, "Seleccione");
            cmbSectores.Items[0].Value = "-1";
        }
        catch (Exception) { }
    }
    private void LimpiarControles()
    {
        try
        {
            txtLEgajoIni.Text = string.Empty;
            txtLegajoFin.Text = string.Empty;

            CargarSector();

            txtFechaIni.Text = string.Empty;
            txtFechaFin.Text = string.Empty;
        }
        catch (Exception) { }
    }
    private void BuscarLegajos()
    {
        try
        {
            int _legajoDesde, _legajoHasta, _idSector;
            //CALegajoON mLegajo = new CALegajoON();
            //DataSet mDSLegajos;
            if (txtLEgajoIni.Text != string.Empty)
            {
                _legajoDesde = int.Parse(txtLEgajoIni.Text);
                //mLegajo.BusqLegajoIni = int.Parse(txtLEgajoIni.Text);
                //mLegajoIni = mLegajoIni;
            }
            else
            {
                _legajoDesde = -1;
                //mLegajo.BusqLegajoIni = 0;
                //mLegajoIni = null;
            }
            if (txtLegajoFin.Text != string.Empty)
            {
                _legajoHasta= int.Parse(txtLegajoFin.Text);
                //mLegajo.BusqLegajoFin = int.Parse(txtLegajoFin.Text);
                //mLegajoFin = mLegajo;
            }
            else
            {
                _legajoHasta = -1;
                //mLegajo.BusqLegajoFin = 0;
                //mLegajoFin = null;
            }
            //if (cmbSectores != null && cmbSectores.DataSource == null)
            //{
            _idSector = int.Parse(cmbSectores.SelectedValue);
                //if (int.Parse(cmbSectores.SelectedValue) > -1)
                //{
                //    mLegajo.Sector = RecuperarSector();
                //    mSector = mLegajo.Sector;
                //}
            //}
            if (cmbSectores.Visible == false && mSector.IdSector > -1)
            //else
            {
                throw new ArgumentException("Implementar caso cmbSectores.Visible = false (UCFiltroRPT.ascx -> BuscarLegajos()");
                //mLegajo.Sector = RecuperarSector(mSector.IdSector);
                //mSector = mLegajo.Sector;
            }
            CA2PersonalColeccion _personalColeccion = CA2Personal.ObtenerEnrteLegajosYSectores(_legajoDesde, _legajoHasta, _idSector, _idSector);
            //mDSLegajos = mLegajo.RecuperarLegajos();


            mListaLegajos = _personalColeccion;
            //Session["ListadoLegajos"] = _personalColeccion;
            if (mListaLegajos.Count != 0)
            {
                BuscarPartes();
            }
            else
            {
                Session["ListadoPartesDiarios"] = null;
            }
        }
        catch (Exception) { }
    }
    private void BuscarPartes()
    {   
            //RANGO DE LEGAJOS
            int _legajoDesde;
            int _legajoHasta;

            int.TryParse(txtLEgajoIni.Text, out _legajoDesde);
            if (_legajoDesde == 0)
                _legajoDesde = -1; // lo pono en -1 para que me traiga todos

            int.TryParse(txtLegajoFin.Text, out _legajoHasta);
            if (_legajoHasta == 0)
                _legajoHasta = -1; //lo pongo en -1 para que me traiga todos

            //si solo ha especificado un numero, tengo que traer solo los legajos de ese numero.
            if ((_legajoDesde > -1)
                && (_legajoHasta == -1))
                _legajoHasta = _legajoDesde;

            //RANGO DE FECHAS
            DateTime _FechaDesde, _FechaHasta;
            if (DateTime.TryParse(txtFechaIni.Text, out _FechaDesde) == false) //no es una fecha valida.
                _FechaDesde = CA2Parametros.FechaMinima;
            _FechaDesde = _FechaDesde.Date; //lo pongo en 00:00

            if (DateTime.TryParse(txtFechaFin.Text, out _FechaHasta) == false)
                _FechaHasta = _FechaDesde;
            _FechaHasta = _FechaHasta.Date.AddDays(1).AddSeconds(-1); //lo pongo en 23:59

            CA2ParteDiarioColeccion _partes = CA2ParteDiario.ObtenerPartesDiariosPor(_FechaDesde, _FechaHasta, _legajoDesde, "Todos", -1, _legajoHasta);

            mListaPartesDiarios = _partes;
            Session["ListadoPartesDiarios"] = mListaPartesDiarios;
    }
    public bool Validar()
    {
        try
        {
            DateTime paso;
            int valor;
            if (!DateTime.TryParse(txtFechaIni.Text, out paso))
            {
                lblMsjError.Text = "La fecha Desde del intervalo no es correcta.";
                return false;
            }
            if (!DateTime.TryParse(txtFechaFin.Text, out paso))
            {
                lblMsjError.Text = "La fecha Hasta del intervalo no es correcta.";
                return false;
            }
            if (DateTime.Parse(txtFechaIni.Text) > DateTime.Parse(txtFechaFin.Text))
            {
                lblMsjError.Text = "El intervalo de fechas ingresado es incorrecto";
                return false;
            }
            if (txtLEgajoIni.Text != string.Empty)
            {
                if (!int.TryParse(txtLEgajoIni.Text, out valor))
                {
                    lblMsjError.Text = "El valor ingresado en el intervalo de legajos no es correcto";
                    return false;
                }
            }
            if (txtLegajoFin.Text != string.Empty)
            {
                if (!int.TryParse(txtLegajoFin.Text, out valor))
                {
                    lblMsjError.Text = "El valor ingresado en el intervalo de legajos no es correcto";
                    return false;
                }

            }
            return true;
        }
        catch (Exception) { return false; }

    }
    //private CASectorON RecuperarSector()
    //{
    //    CASectorON MiSector = new CASectorON();
    //    try
    //    {
    //        MiSector.IdSector = int.Parse(cmbSectores.SelectedValue);
    //        MiSector.Editar();
    //    }
    //    catch (Exception ex)
    //    {
    //        Session["error"] = ex;
    //        Response.Redirect("CAError.aspx");
    //    }
    //    return MiSector;
    //}
    //private CASectorON RecuperarSector(int pSector)
    //{
    //    CASectorON MiSector = new CASectorON();
    //    try
    //    {
    //        MiSector.IdSector = pSector;
    //        MiSector.Editar();
    //    }
    //    catch (Exception ex)
    //    {
    //        Session["error"] = ex;
    //        Response.Redirect("CAError.aspx");
    //    }
    //    return MiSector;
    //}
    #endregion
}